from tensorflow.keras.layers import Conv1D, Conv1DTranspose

'''
定义一维卷积层和反卷积层，用于构建神经网络
'''

def conv1d(hidden, filters, kernel_size, strides=1, activation=None, padding='same', kernel_regularizer=None):
    '''
    创建卷积层
    hidden: 输入张量
    filters: 卷积核的数量
    kernel_size: 卷积核的大小
    strides: 卷积的步长，默认为 1
    activation: 激活函数
    padding: 填充方式，默认为 'same'，表示输出大小与输入相同
    kernel_regularizer: 用于正则化卷积核的函数，防止过拟合
    '''
    hidden = Conv1D(filters=filters,
                    kernel_size=kernel_size,
                    strides=strides,
                    activation=activation,
                    padding=padding,
                    kernel_regularizer=kernel_regularizer)(hidden)
    # 返回经过卷积处理后的隐藏张量
    return hidden


def deconv1d(hidden, filters, kernel_size, strides=1, activation=None, padding='same', kernel_regularizer=None):
    '''
    创建一维反卷积层
    hidden: 输入张量，通常是经过前一个层处理后的特征图
    filters: 输出空间的维度，等于卷积核的数量
    kernel_size: 卷积核的大小
    strides: 反卷积的步长，默认为 1
    activation: 激活函数，默认为 None
    padding: 填充方式，默认为 'same'
    kernel_regularizer: 用于正则化卷积核的函数
    '''
    hidden = Conv1DTranspose(filters,
                             kernel_size=kernel_size,
                             strides=strides,
                             activation=activation,
                             padding=padding,
                             kernel_regularizer=kernel_regularizer)(hidden)
    # 返回经过反卷积处理后的隐藏张量
    return hidden